home *** CD-ROM | disk | FTP | other *** search
/ Hebrew Games I Got / יום הולדת לאיתמר - גרסא ישנה 1.1.IMG / setupapi.inc < prev    next >
Text File  |  1996-10-27  |  57KB  |  1,834 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. ''''$DEFINE DEBUG
  5. GLOBAL hSetup AS INTEGER
  6. GLOBAL fFrameInit AS INTEGER
  7. GLOBAL fInstallInit AS INTEGER
  8.  
  9. CONST SM_CXSCREEN = 0
  10. CONST SM_CYSCREEN = 1
  11.  
  12. CONST WF_80x87    = 1024
  13. CONST WF_CPU186   =  128
  14. CONST WF_CPU286   =    2
  15. CONST WF_CPU386   =    4
  16. CONST WF_CPU486   =    8
  17. CONST WF_STANDARD =   16
  18. CONST WF_ENHANCED =   32
  19.  
  20.  
  21. '' DoMsgBox Flags
  22.  
  23. CONST MB_OK          = 0
  24. CONST MB_ICONHAND    = 16
  25. CONST MB_TASKMODAL   = 8192
  26.  
  27.  
  28. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  29. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  32. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  33. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  34. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  35.  
  36.  
  37.  
  38.  
  39. '**************************************************************************
  40. '****************************** Setup Constants ***************************
  41. '**************************************************************************
  42.  
  43.  
  44. ''Command Option Flags
  45.  
  46. CONST cmoVital       = 1
  47. CONST cmoCopy        = 2
  48. CONST cmoUndo        = 4
  49. CONST cmoRoot        = 8
  50. CONST cmoDecompress  = 16
  51. CONST cmoTimeStamp   = 32
  52. CONST cmoReadOnly    = 64
  53. CONST cmoBackup      = 128
  54. CONST cmoForce       = 256
  55. CONST cmoRemove      = 512
  56. CONST cmoOverwrite   = 1024
  57. CONST cmoAppend      = 2048
  58. CONST cmoPrepend     = 4096
  59. CONST cmoNone        = 0
  60. CONST cmoAll         = 65535
  61.  
  62.  
  63. ''File Exist Modes
  64.  
  65. CONST femExists     = 0
  66. CONST femRead       = 1
  67. CONST femWrite      = 2
  68. CONST femReadWrite  = 3
  69.  
  70.  
  71. ''Read-Only Return Code
  72.  
  73. CONST ynrcNo         = 0
  74. CONST ynrcYes        = 1
  75. CONST ynrcErr1       = 2
  76. CONST ynrcErr2       = 3
  77. CONST ynrcErr3       = 4
  78. CONST ynrcErr4       = 5
  79. CONST ynrcErr5       = 6
  80. CONST ynrcErr6       = 7
  81. CONST ynrcErr7       = 8
  82. CONST ynrcErr8       = 9
  83. CONST ynrcErr9       = 10
  84.  
  85.  
  86. ''General Return Codes
  87.  
  88. CONST grcOkay       = 0
  89. CONST grcNotOkay    = 1
  90. CONST grcUserQuit   = 48
  91.  
  92.  
  93. ''Ranges
  94.  
  95. ''CONST cbSymValMax = 8192
  96. CONST cbSymValMax = 512
  97.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  98.     '' but we get Out of String Space wattdrvr error if we alloc
  99.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  100.     '' We should look into using dynamic far alloc instead of
  101.     '' STRING$ for large buffers.
  102.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  103.  
  104.  
  105. ''ON ERROR Error Codes
  106. CONST STFERR      = 1024   ''setup system error
  107. CONST STFQUIT     = 1025   ''user quit
  108.  
  109. CONST scmOff      = 0
  110. CONST scmOnIgnore = 1
  111. CONST scmOnFatal  = 2
  112.  
  113.  
  114. '**************************************************************************
  115. '********************************  Setup API's  ***************************
  116. '**************************************************************************
  117.  
  118. '' common
  119.  
  120. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  121. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  122. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  124. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  125. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  126. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  127. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  128. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  129. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  130. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  131.  
  132.  
  133. ''shell
  134.  
  135. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  136. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  137. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  138. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  139. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  140. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  141. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  142. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  143. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  144. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  145. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  147. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  148.  
  149.  
  150. ''shell
  151.  
  152. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  153. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  154. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  155.  
  156.  
  157.  
  158. ''install
  159.  
  160. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  161. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  163. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  164. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  166. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  167. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  174. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  175. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  176. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  177. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  178. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  179. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  180. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  181. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  183. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  184. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  185. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  186. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  187. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  188. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  189. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  190. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  191. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  192. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  193. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  194. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  195. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  196. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  197.  
  198. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  199.  
  200.  
  201.  
  202. '*************************************************************************
  203. '****************  Setup Basic Wrapper Declarations  *********************
  204. '*************************************************************************
  205.  
  206.  
  207. ''shell
  208.  
  209. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  210. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  211. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  212. DECLARE SUB UIPop (n%)
  213. DECLARE SUB UIPopAll
  214. DECLARE SUB SetTitle (sz$)
  215. DECLARE SUB ReadInfFile (szFile$)
  216. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  217. DECLARE SUB RemoveSymbol (szSym$)
  218. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  219. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  220. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  221. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  222. DECLARE SUB AddListItem(szSymbol$, szItem$)
  223. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  224.  
  225. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  226. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  227.  
  228. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  229. DECLARE SUB RestoreCursor (hPrev%)
  230.  
  231. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  232. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  233.  
  234. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  235. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  236. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  237. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  238.  
  239. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  240. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  241. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  242. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  243.  
  244.  
  245. ''install
  246.  
  247.  
  248. DECLARE SUB CreateDir (szDir$, cmo%)
  249. DECLARE SUB RemoveDir (szDir$, cmo%)
  250. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  251. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  252. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  253. DECLARE SUB CopyFilesInCopyList
  254. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  255. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  256. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  257. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  258. DECLARE SUB CreateProgmanGroup (szGroup$, szAltGroup$, szPath$, cmo%)
  259. DECLARE SUB CreateProgmanItem (szGroup$, szAltGroup$, szItem$, szAltItem$, szCmd$, szOther$, cmo%)
  260. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  261. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  262. DECLARE SUB DumpCopyList (szFile$)
  263. DECLARE SUB ClearCopyList
  264. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  265. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  266. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  267. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  268. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  269. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  270. DECLARE SUB InitInstall
  271. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  272. DECLARE SUB AddBlankToBillboardList (lTicks&)
  273. DECLARE SUB ClearBillboardList
  274. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  275. DECLARE SUB CloseLogFile
  276. DECLARE SUB WriteToLogFile (szStr$)
  277. DECLARE SUB SetCopyGaugePosition (x%, y%)
  278. DECLARE SUB SetRestartDir(szDir$)
  279. DECLARE FUNCTION RestartListEmpty AS INTEGER
  280. DECLARE FUNCTION ExitExecRestart AS INTEGER
  281. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  282. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  283. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  284. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  285. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  286.  
  287. '$ifdef DEBUG
  288.  
  289. '' Error Handling
  290.  
  291.  
  292. '' Setup API Errors
  293. CONST saeFail   = 0
  294. CONST saeInit   = 1
  295. CONST saeNYI    = 3
  296. CONST saeArg    = 4    ''must be max sae value
  297.  
  298. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  299. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  300.  
  301. '' chk arg
  302. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  303. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  304. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  305. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  306.  
  307. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  308. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  309.  
  310. '$endif ''DEBUG
  311.  
  312.  
  313.  
  314. '' Windows system detect
  315.  
  316. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  317. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  318. DECLARE FUNCTION GetWindowsMode AS INTEGER
  319. DECLARE FUNCTION GetWindowsDir  AS STRING
  320. DECLARE FUNCTION GetWindowsSysDir AS STRING
  321. DECLARE FUNCTION IsWindowsShared AS INTEGER
  322. DECLARE FUNCTION GetScreenWidth AS INTEGER
  323. DECLARE FUNCTION GetScreenHeight AS INTEGER
  324.  
  325.  
  326. '*************************************************************************
  327. '*****************  Setup Basic Wrapper Definitions  *********************
  328. '*************************************************************************
  329. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  330.     fFrameInit = 0
  331.     fInstallInit = 0
  332.  
  333.     IF hSetup > 0 THEN
  334. '$ifdef DEBUG
  335.         StfApiErr saeInit, "InitSetup", szCmdLine$
  336. '$endif ''DEBUG
  337.     END IF
  338.  
  339.     i% = InitFrame(szCmdLine$)
  340.     fFrameInit = 1
  341.  
  342.     InitInstall
  343.     fInstallInit = 1
  344.  
  345.     InitSetup = i%
  346. END FUNCTION
  347.  
  348.  
  349.  
  350. '**************************************************************************
  351. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  352.     IF hSetup > 0 THEN
  353. '$ifdef DEBUG
  354.         StfApiErr saeInit, "InitFrame", szCmdLine$
  355. '$endif ''DEBUG
  356.     ELSE
  357.         i% = InitializeFrame(szCmdLine$)
  358.         IF i% = -1 THEN
  359.             END   '' NOT an error - Usage (/?) or Command line copy operation
  360.         ELSEIF i% = 0 THEN
  361. '$ifdef DEBUG
  362.             StfApiErr saeFail, "InitFrame", szCmdLine$
  363. '$endif ''DEBUG
  364.             END
  365.         ELSE
  366.             InitFrame = i%
  367.         END IF
  368.     END IF
  369. END FUNCTION
  370.  
  371.  
  372. '**************************************************************************
  373. SUB SetBitmap(szDll$, Bitmap%) STATIC
  374.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  375. '$ifdef DEBUG
  376.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  377. '$endif ''DEBUG
  378.         ERROR STFERR
  379.     END IF
  380. END SUB
  381.  
  382.  
  383. '**************************************************************************
  384. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  385.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  386. '$ifdef DEBUG
  387.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  388. '$endif ''DEBUG
  389.         ERROR STFERR
  390.     END IF
  391. END SUB
  392.  
  393.  
  394. '*************************************************************************
  395. SUB SetTitle(sz$) STATIC
  396.     SetWindowText HwndFrame(), sz$
  397. END SUB
  398.  
  399.  
  400. '*************************************************************************
  401. SUB ReadInfFile (szFile$) STATIC
  402. '$ifdef DEBUG
  403.     if FValidFATPath(szFile$) = 0 then
  404.         BadArgErr 1, "ReadInfFile", szFile$
  405.     end if
  406.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  407.         StfApiErr saeFail, "ReadInfFile", szFile$
  408. '$else  ''!DEBUG
  409.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  410. '$endif ''!DEBUG
  411.         ERROR STFERR
  412.     END IF
  413. END SUB
  414.  
  415.  
  416. '*************************************************************************
  417. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  418. '$ifdef DEBUG
  419.     if szDll$ = "" then
  420.         n% = 1
  421.     elseif szDlgProc$ = "" then
  422.         n% = 3
  423.     else
  424.         n% = 0
  425.     end if
  426.     if n% > 0 then
  427.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  428.     end if
  429. '$endif ''DEBUG
  430.  
  431.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  432. '$ifdef DEBUG
  433.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  434. '$endif ''DEBUG
  435.         ERROR STFERR
  436.     ELSE
  437.         UIStartDlg = GetSymbolValue("DLGEVENT")
  438.     END IF
  439. END FUNCTION
  440.  
  441.  
  442. '*************************************************************************
  443. SUB UIPop (n%) STATIC
  444.     IF FKillNDialogs(n%) = 0 THEN
  445. '$ifdef DEBUG
  446.         StfApiErr saeFail, "UIPop", STR$(n%)
  447. '$endif ''DEBUG
  448.         ERROR STFERR
  449.     END IF
  450. END SUB
  451.  
  452.  
  453. '*************************************************************************
  454. SUB UIPopAll STATIC
  455.     IF FKillNDialogs(65535) = 0 THEN
  456. '$ifdef DEBUG
  457.         StfApiErr saeFail, "UIPopAll", ""
  458. '$endif ''DEBUG
  459.         ERROR STFERR
  460.     END IF
  461. END SUB
  462.  
  463.  
  464. '*************************************************************************
  465. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  466. '$ifdef DEBUG
  467.     if szSymbol$ = "" then
  468.         BadArgErr 1, "GetSymbolValue", szSymbol$
  469.     end if
  470. '$endif ''DEBUG
  471.     szValue$ = string$(cbSymValMax,32)
  472.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  473.     GetSymbolValue = szValue$
  474.     IF Length% >= cbSymValMax THEN
  475.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  476.         ERROR STFERR
  477.     END IF
  478.     IF szSymbol$ = "" THEN
  479.         ERROR STFERR
  480.     END IF
  481.     szValue$ = ""
  482. END FUNCTION
  483.  
  484.  
  485. '*************************************************************************
  486. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  487. '$ifdef DEBUG
  488.     if szSymbol$ = "" then
  489.         BadArgErr 1, "GetListLength", szSymbol$
  490.     end if
  491. '$endif ''DEBUG
  492.     GetListLength = UsGetListLength(szSymbol$)
  493.     IF szSymbol$ = "" THEN
  494.         ERROR STFERR
  495.     END IF
  496. END FUNCTION
  497.  
  498.  
  499. '*************************************************************************
  500. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  501. '$ifdef DEBUG
  502.     if szListSymbol$ = "" then
  503.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  504.     end if
  505.  
  506.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  507.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  508.     end if
  509. '$endif ''DEBUG
  510.  
  511.     szListItem$ = string$(cbSymValMax,32)
  512.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  513.     GetListItem = szListItem$
  514.     IF Length% >= cbSymValMax THEN
  515.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  516.         ERROR STFERR
  517.     END IF
  518.     IF szListSymbol$ = "" THEN
  519.         ERROR STFERR
  520.     END IF
  521.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  522.         ERROR STFERR
  523.     end if
  524.     szListItem$ = ""
  525. END FUNCTION
  526.  
  527.  
  528. '*************************************************************************
  529. SUB AddListItem(szSymbol$, szItem$) STATIC
  530. '$ifdef DEBUG
  531.     if szSymbol$ = "" then
  532.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  533.     end if
  534. '$endif ''DEBUG
  535.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  536. '$ifdef DEBUG
  537.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  538. '$endif ''DEBUG
  539.         ERROR STFERR
  540.     END IF
  541. END SUB
  542.  
  543.  
  544. '*************************************************************************
  545. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  546. '$ifdef DEBUG
  547.     if szSymbol$ = "" then
  548.         nArg% = 1
  549.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  550.         nArg% = 2
  551.     else
  552.         nArg% = 0
  553.     end if
  554.     if nArg% > 0 then
  555.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  556.     end if
  557. '$endif ''DEBUG
  558.  
  559.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  560. '$ifdef DEBUG
  561.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  562. '$endif ''DEBUG
  563.         ERROR STFERR
  564.     END IF
  565. END SUB
  566.  
  567.  
  568. '**************************************************************************
  569. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  570. '$ifdef DEBUG
  571.     if szSymbol$ = "" then
  572.         n% = 1
  573.     elseif FValidInfSect(szSect$) = 0 then
  574.         n% = 2
  575.     else
  576.         n% = 0
  577.     end if
  578.     if n% > 0 then
  579.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  580.     end if
  581. '$endif ''DEBUG
  582.  
  583.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  584. '$ifdef DEBUG
  585.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  586. '$endif ''DEBUG
  587.         ERROR STFERR
  588.     END IF
  589. END SUB
  590.  
  591.  
  592. '*************************************************************************
  593. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  594. '$ifdef DEBUG
  595.     if szSymbol$ = "" then
  596.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  597.     end if
  598. '$endif ''DEBUG
  599.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  600. '$ifdef DEBUG
  601.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  602. '$endif ''DEBUG
  603.         ERROR STFERR
  604.     END IF
  605. END SUB
  606.  
  607.  
  608. '*************************************************************************
  609. SUB RemoveSymbol(szSym$) STATIC
  610. '$ifdef DEBUG
  611.     if szSym$ = "" then
  612.         BadArgErr 1, "RemoveSymbol", szSym$
  613.     end if
  614. '$endif ''DEBUG
  615.     IF FRemoveSymbol(szSym$) = 0 THEN
  616. '$ifdef DEBUG
  617.         StfApiErr saeFail, "RemoveSymbol", szSym$
  618. '$endif ''DEBUG
  619.         ERROR STFERR
  620.     END IF
  621. END SUB
  622.  
  623.  
  624. '*************************************************************************
  625. FUNCTION ShowWaitCursor STATIC AS INTEGER
  626.     ShowWaitCursor = HShowWaitCursor
  627. END FUNCTION
  628.  
  629.  
  630. '*************************************************************************
  631. SUB RestoreCursor (hPrev%) STATIC
  632.     i% = FRestoreCursor(hPrev%)
  633.     IF i% = 0 THEN
  634. '$ifdef DEBUG
  635.         StfApiErr saeFail, "RestoreCursor", ""
  636. '$endif ''DEBUG
  637.         ERROR STFERR
  638.     END IF
  639. END SUB
  640.  
  641.  
  642. '*************************************************************************
  643. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  644.     SetBeepingMode = FSetBeepingMode(mode%)
  645. END FUNCTION
  646.  
  647.  
  648. '*************************************************************************
  649. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  650.     SetSilentMode = FSetSilent(mode%)
  651. END FUNCTION
  652.  
  653.  
  654. '*************************************************************************
  655. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  656. '$ifdef DEBUG
  657.     if FValidInfSect(szSect$) = 0 then
  658.         n% = 1
  659.     elseif szKey$ = "" then
  660.         n% = 2
  661.     else
  662.         n% = 0
  663.     end if
  664.     if n% > 0 then
  665.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  666.     end if
  667. '$endif ''DEBUG
  668.  
  669.     szBuf$ = string$(128, 32)
  670.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  671.     IF Length% >= 128 THEN
  672.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  673.         ERROR STFERR
  674.     END IF
  675.  
  676.     IF Length% = -1 THEN
  677. '$ifdef DEBUG
  678.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  679. '$endif ''DEBUG
  680.         ERROR STFERR
  681.     END IF
  682.  
  683.     GetSectionKeyDate = szBuf$
  684.     szBuf$ = ""
  685. END FUNCTION
  686.  
  687.  
  688. '*************************************************************************
  689. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  690. '$ifdef DEBUG
  691.     if FValidInfSect(szSect$) = 0 then
  692.         n% = 1
  693.     elseif szKey$ = "" then
  694.         n% = 2
  695.     else
  696.         n% = 0
  697.     end if
  698.     if n% > 0 then
  699.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  700.     end if
  701. '$endif ''DEBUG
  702.  
  703.     szBuf$ = string$(128, 32)
  704.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  705.     IF Length% >= 128 THEN
  706.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  707.         ERROR STFERR
  708.     END IF
  709.  
  710.     IF Length% = -1 THEN
  711. '$ifdef DEBUG
  712.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  713. '$endif ''DEBUG
  714.         ERROR STFERR
  715.     END IF
  716.  
  717.     GetSectionKeyFilename = szBuf$
  718.     szBuf$ = ""
  719. END FUNCTION
  720.  
  721.  
  722. '*************************************************************************
  723. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  724. '$ifdef DEBUG
  725.     if FValidInfSect(szSect$) = 0 then
  726.         n% = 1
  727.     elseif szKey$ = "" then
  728.         n% = 2
  729.     else
  730.         n% = 0
  731.     end if
  732.     if n% > 0 then
  733.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  734.     end if
  735. '$endif ''DEBUG
  736.  
  737.     szBuf$ = string$(128, 32)
  738.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  739.     IF Length% >= 128 THEN
  740.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  741.         ERROR STFERR
  742.     END IF
  743.  
  744.     IF Length% = -1 THEN
  745. '$ifdef DEBUG
  746.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  747. '$endif ''DEBUG
  748.         ERROR STFERR
  749.     END IF
  750.  
  751.     GetSectionKeySize = VAL(szBuf$)
  752.     szBuf$ = ""
  753. END FUNCTION
  754.  
  755.  
  756. '*************************************************************************
  757. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  758. '$ifdef DEBUG
  759.     if FValidInfSect(szSect$) = 0 then
  760.         n% = 1
  761.     elseif szKey$ = "" then
  762.         n% = 2
  763.     else
  764.         n% = 0
  765.     end if
  766.     if n% > 0 then
  767.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  768.     end if
  769. '$endif ''DEBUG
  770.  
  771.     szBuf$ = string$(128, 32)
  772.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  773.     IF Length% >= 128 THEN
  774.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  775.         ERROR STFERR
  776.     END IF
  777.  
  778.     IF Length% = -1 THEN
  779. '$ifdef DEBUG
  780.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  781. '$endif ''DEBUG
  782.         ERROR STFERR
  783.     END IF
  784.  
  785.     GetSectionKeyVersion = szBuf$
  786.     szBuf$ = ""
  787. END FUNCTION
  788.  
  789.  
  790. '*************************************************************************
  791. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  792. '$ifdef DEBUG
  793.     if szSym$ = "" then
  794.         n% = 1
  795.     elseif FValidInfSect(szSect$) = 0 then
  796.         n% = 2
  797.     else
  798.         n% = 0
  799.     end if
  800.     if n% > 0 then
  801.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  802.     end if
  803. '$endif ''DEBUG
  804.  
  805.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  806. '$ifdef DEBUG
  807.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  808. '$endif ''DEBUG
  809.         ERROR STFERR
  810.     END IF
  811. END SUB
  812.  
  813.  
  814. '*************************************************************************
  815. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  816. '$ifdef DEBUG
  817.     if szSym$ = "" then
  818.         n% = 1
  819.     elseif FValidInfSect(szSect$) = 0 then
  820.         n% = 2
  821.     else
  822.         n% = 0
  823.     end if
  824.     if n% > 0 then
  825.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  826.     end if
  827. '$endif ''DEBUG
  828.  
  829.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  830. '$ifdef DEBUG
  831.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  832. '$endif ''DEBUG
  833.         ERROR STFERR
  834.     END IF
  835. END SUB
  836.  
  837.  
  838. '*************************************************************************
  839. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  840. '$ifdef DEBUG
  841.     if szSym$ = "" then
  842.         n% = 1
  843.     elseif FValidInfSect(szSect$) = 0 then
  844.         n% = 2
  845.     else
  846.         n% = 0
  847.     end if
  848.     if n% > 0 then
  849.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  850.     end if
  851. '$endif ''DEBUG
  852.  
  853.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  854. '$ifdef DEBUG
  855.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  856. '$endif ''DEBUG
  857.         ERROR STFERR
  858.     END IF
  859. END SUB
  860.  
  861.  
  862. '*************************************************************************
  863. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  864. '$ifdef DEBUG
  865.     if szSym$ = "" then
  866.         n% = 1
  867.     elseif FValidInfSect(szSect$) = 0 then
  868.         n% = 2
  869.     else
  870.         n% = 0
  871.     end if
  872.     if n% > 0 then
  873.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  874.     end if
  875. '$endif ''DEBUG
  876.  
  877.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  878. '$ifdef DEBUG
  879.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  880. '$endif ''DEBUG
  881.         ERROR STFERR
  882.     END IF
  883. END SUB
  884.  
  885.  
  886. '*************************************************************************
  887. SUB InitInstall STATIC
  888.     IF hSetup > 0 THEN
  889. '$ifdef DEBUG
  890.         StfApiErr saeInit, "InitInstall", ""
  891. '$endif ''DEBUG
  892.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  893. '$ifdef DEBUG
  894.         StfApiErr saeFail, "InitInstall", ""
  895. '$endif ''DEBUG
  896.         END
  897.     END IF
  898. END SUB
  899.  
  900.  
  901. '*************************************************************************
  902. SUB CreateDir (szDir$, cmo%) STATIC
  903. '$ifdef DEBUG
  904.     if FValidFATDir(szDir$) = 0 then
  905.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  906.     end if
  907. '$endif ''DEBUG
  908.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  909. '$ifdef DEBUG
  910.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  911. '$endif ''DEBUG
  912.         ERROR STFERR
  913.     END IF
  914. END SUB
  915.  
  916.  
  917. '*************************************************************************
  918. SUB RemoveDir (szDir$, cmo%) STATIC
  919. '$ifdef DEBUG
  920.     if FValidFATDir(szDir$) = 0 then
  921.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  922.     end if
  923. '$endif ''DEBUG
  924.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  925. '$ifdef DEBUG
  926.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  927. '$endif ''DEBUG
  928.         ERROR STFERR
  929.     END IF
  930. END SUB
  931.  
  932.  
  933.  
  934. '*************************************************************************
  935. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  936. '$ifdef DEBUG
  937.     if FValidIniFile(szFile$) = 0 then
  938.         n% = 1
  939.     elseif FValidInfSect(szSect$) = 0 then
  940.         n% = 2
  941.     else
  942.         n% = 0
  943.     end if
  944.     if n% > 0 then
  945.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  946.     end if
  947. '$endif ''DEBUG
  948.  
  949.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  950. '$ifdef DEBUG
  951.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  952. '$endif ''DEBUG
  953.         ERROR STFERR
  954.     END IF
  955. END SUB
  956.  
  957.  
  958. '*************************************************************************
  959. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  960. '$ifdef DEBUG
  961.     if FValidIniFile(szFile$) = 0 then
  962.         n% = 1
  963.     elseif FValidInfSect(szSect$) = 0 then
  964.         n% = 2
  965.     else
  966.         n% = 0
  967.     end if
  968.     if n% > 0 then
  969.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  970.     end if
  971. '$endif ''DEBUG
  972.  
  973.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  974. '$ifdef DEBUG
  975.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  976. '$endif ''DEBUG
  977.         ERROR STFERR
  978.     END IF
  979. END SUB
  980.  
  981.  
  982. '*************************************************************************
  983. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  984. '$ifdef DEBUG
  985.     if FValidIniFile(szFile$) = 0 then
  986.         n% = 1
  987.     elseif FValidInfSect(szSect$) = 0 then
  988.         n% = 2
  989.     elseif szKey$ = "" then
  990.         n% = 3
  991.     else
  992.         n% = 0
  993.     end if
  994.     if n% > 0 then
  995.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  996.     end if
  997. '$endif ''DEBUG
  998.  
  999.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1000. '$ifdef DEBUG
  1001.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1002. '$endif ''DEBUG
  1003.         ERROR STFERR
  1004.     END IF
  1005. END SUB
  1006.  
  1007.  
  1008. '*************************************************************************
  1009. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1010. '$ifdef DEBUG
  1011.     if FValidFATPath(szFile$) = 0 then
  1012.         n% = 1
  1013.     elseif FValidInfSect(szSect$) = 0 then
  1014.         n% = 2
  1015.     elseif szKey$ = "" then
  1016.         n% = 3
  1017.     else
  1018.         n% = 0
  1019.     end if
  1020.     if n% > 0 then
  1021.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1022.     end if
  1023. '$endif ''DEBUG
  1024.  
  1025.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1026. '$ifdef DEBUG
  1027.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1028. '$endif ''DEBUG
  1029.         ERROR STFERR
  1030.     END IF
  1031. END SUB
  1032.  
  1033.  
  1034. '*************************************************************************
  1035. SUB CreateProgmanGroup (szGroup$, szAltGroup$, szPath$, cmo%) STATIC
  1036. '$ifdef DEBUG
  1037.     if szGroup$ = "" or len(szGroup$) > 24 then
  1038.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1039.     end if
  1040.     if szAltGroup$ = "" or len(szAltGroup$) > 24 then
  1041.         BadArgErr 1, "CreateAltProgmanGroup", szAltGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1042.     end if
  1043. '$endif ''DEBUG
  1044.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1045. '$ifdef DEBUG
  1046.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1047. '$endif ''DEBUG
  1048.       szGroup$ = szAltGroup$
  1049.       IF FCreateProgManGroup(szGroup$, szPath$, cm%) = 0 THEN
  1050. '$ifdef DEBUG
  1051.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1052. '$endif ''DEBUG
  1053.         ERROR STFERR
  1054.       END IF
  1055.     END IF
  1056. END SUB
  1057.  
  1058.  
  1059. '*************************************************************************
  1060. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1061. '$ifdef DEBUG
  1062.     if szGroup$ = "" or len(szGroup$) > 24 then
  1063.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1064.     end if
  1065. '$endif ''DEBUG
  1066.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1067. '$ifdef DEBUG
  1068.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1069. '$endif ''DEBUG
  1070.         ERROR STFERR
  1071.     END IF
  1072. END SUB
  1073.  
  1074.  
  1075. '*************************************************************************
  1076. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1077. '$ifdef DEBUG
  1078.     if FValidInfSect(szSect$) = 0 then
  1079.         n% = 1
  1080.     elseif szKey$ = "" then
  1081.         n% = 2
  1082.     elseif FValidFATDir(szDst$) = 0 then
  1083.         n% = 3
  1084.     else
  1085.         n% = 0
  1086.     end if
  1087.     if n% > 0 then
  1088.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1089.     end if
  1090. '$endif ''DEBUG
  1091.  
  1092.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1093. '$ifdef DEBUG
  1094.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1095. '$endif ''DEBUG
  1096.         ERROR STFERR
  1097.     END IF
  1098. END SUB
  1099.  
  1100.  
  1101. '*************************************************************************
  1102. SUB DumpCopyList (szFile$) STATIC
  1103. '$ifdef DEBUG
  1104.     if szFile$ = "" then
  1105.         BadArgErr 1, "DumpCopyList", szFile$
  1106.     end if
  1107. '$endif ''DEBUG
  1108.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1109. '$ifdef DEBUG
  1110.         StfApiErr saeFail, "DumpCopyList", szFile$
  1111. '$endif ''DEBUG
  1112.         ERROR STFERR
  1113.     END IF
  1114. END SUB
  1115.  
  1116.  
  1117. '*************************************************************************
  1118. SUB ClearCopyList STATIC
  1119.     ResetCopyList
  1120. END SUB
  1121.  
  1122.  
  1123. '*************************************************************************
  1124. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1125.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1126.     IF lNeed& < 0 THEN
  1127. '$ifdef DEBUG
  1128.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1129. '$endif ''DEBUG
  1130.         ERROR STFERR
  1131.     END IF
  1132.     GetCopyListCost = lNeed&
  1133. END FUNCTION
  1134.  
  1135.  
  1136. '*************************************************************************
  1137. SUB CreateProgmanItem (szGroup$, szAltGroup$, szItem$, szAltItem$, szCmd$, szOther$, cmo%) STATIC
  1138. IF szGroup$ = szAltGroup$ THEN    
  1139.   szItemNew$ = szAltItem$
  1140.   IF szOther$ <> "" THEN
  1141.     szItemNew$ = szAltItem$ + "," + szOther$
  1142.   END IF
  1143.  
  1144. '$ifdef DEBUG
  1145.   if szGroup$ = "" or len(szGroup$) > 24 then
  1146.     BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1147.   end if
  1148. '$endif ''DEBUG
  1149.  
  1150.   IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1151. '$ifdef DEBUG
  1152.     StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1153. '$endif ''DEBUG
  1154.     ERROR STFERR
  1155.   END IF
  1156. ELSE
  1157.   szItemNew$ = szItem$
  1158.   IF szOther$ <> "" THEN
  1159.     szItemNew$ = szItem$ + "," + szOther$
  1160.   END IF
  1161.  
  1162. '$ifdef DEBUG
  1163.   if szGroup$ = "" or len(szGroup$) > 24 then
  1164.     BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1165.   end if
  1166. '$endif ''DEBUG
  1167.  
  1168.   IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1169. '$ifdef DEBUG
  1170.     StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1171. '$endif ''DEBUG
  1172.   END IF
  1173.   szItemNew$ = ""
  1174. END IF
  1175. END SUB
  1176.  
  1177.  
  1178. '*************************************************************************
  1179. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1180. '$ifdef DEBUG
  1181.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1182.         n% = 1
  1183.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1184.         n% = 1
  1185.     elseif szProgHelp$ = "" then
  1186.         n% = 2
  1187.     else
  1188.         n% = 0
  1189.     end if
  1190.     if n% > 0 then
  1191.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1192.     end if
  1193. '$endif ''DEBUG
  1194.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1195. '$ifdef DEBUG
  1196.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1197. '$endif ''DEBUG
  1198.         ERROR STFERR
  1199.     END IF
  1200. END SUB
  1201.  
  1202.  
  1203. '*************************************************************************
  1204. SUB CopyFilesInCopyList STATIC
  1205.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1206.  
  1207.     IF grc% = grcUserQuit THEN
  1208.         ERROR STFQUIT
  1209.     ELSEIF grc% > 0 THEN
  1210. '$ifdef DEBUG
  1211.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1212. '$endif ''DEBUG
  1213.         ERROR STFERR
  1214.     END IF
  1215. END SUB
  1216.  
  1217.  
  1218. '*************************************************************************
  1219. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1220. '$ifdef DEBUG
  1221.     if FValidFATPath(szFullPathSrc$) = 0 then
  1222.         n% = 1
  1223.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1224.         n% = 2
  1225.     else
  1226.         n% = 0
  1227.     end if
  1228.     if n% > 0 then
  1229.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1230.     end if
  1231. '$endif ''DEBUG
  1232.  
  1233.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1234. '$ifdef DEBUG
  1235.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1236. '$endif ''DEBUG
  1237.         ERROR STFERR
  1238.     END IF
  1239. END SUB
  1240.  
  1241.  
  1242.  
  1243. '*************************************************************************
  1244. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1245. '$ifdef DEBUG
  1246.     if FValidFATPath(szFullPathSrc$) = 0 then
  1247.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1248.     end if
  1249. '$endif ''DEBUG
  1250.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1251. '$ifdef DEBUG
  1252.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1253. '$endif ''DEBUG
  1254.         ERROR STFERR
  1255.     END IF
  1256. END SUB
  1257.  
  1258.  
  1259. '*************************************************************************
  1260. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1261. '$ifdef DEBUG
  1262.     if FValidFATPath(szFullPath$) = 0 then
  1263.         n% = 1
  1264.     elseif szBackup$ = "" then
  1265.         n% = 2
  1266.     else
  1267.         n% = 0
  1268.     end if
  1269.     if n% > 0 then
  1270.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1271.     end if
  1272. '$endif ''DEBUG
  1273.  
  1274.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1275. '$ifdef DEBUG
  1276.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1277. '$endif ''DEBUG
  1278.         ERROR STFERR
  1279.     END IF
  1280. END SUB
  1281.  
  1282.  
  1283. '*************************************************************************
  1284. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1285. '$ifdef DEBUG
  1286.     if FValidFATPath(szFullPath$) = 0 then
  1287.         n% = 1
  1288.     elseif szBackup$ = "" then
  1289.         n% = 2
  1290.     else
  1291.         n% = 0
  1292.     end if
  1293.     if n% > 0 then
  1294.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1295.     end if
  1296. '$endif ''DEBUG
  1297.  
  1298.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1299. '$ifdef DEBUG
  1300.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1301. '$endif ''DEBUG
  1302.         ERROR STFERR
  1303.     END IF
  1304. END SUB
  1305.  
  1306.  
  1307. '*************************************************************************
  1308. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1309. '$ifdef DEBUG
  1310.     if FValidInfSect(szSect$) = 0 then
  1311.         n% = 1
  1312.     elseif FValidFATDir(szSrc$) = 0 then
  1313.         n% = 2
  1314.     elseif FValidFATDir(szDest$) = 0 then
  1315.         n% = 3
  1316.     else
  1317.         n% = 0
  1318.     end if
  1319.     if n% > 0 then
  1320.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1321.     end if
  1322. '$endif ''DEBUG
  1323.  
  1324.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1325. '$ifdef DEBUG
  1326.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1327. '$endif ''DEBUG
  1328.         ERROR STFERR
  1329.     END IF
  1330. END SUB
  1331.  
  1332.  
  1333. '*************************************************************************
  1334. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1335. '$ifdef DEBUG
  1336.     if FValidInfSect(szSect$) = 0 then
  1337.         n% = 1
  1338.     elseif szKey$ = "" then
  1339.         n% = 2
  1340.     elseif FValidFATDir(szSrc$) = 0 then
  1341.         n% = 3
  1342.     elseif FValidFATDir(szDest$) = 0 then
  1343.         n% = 4
  1344.     else
  1345.         n% = 0
  1346.     end if
  1347.     if n% > 0 then
  1348.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1349.     end if
  1350. '$endif ''DEBUG
  1351.  
  1352.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1353. '$ifdef DEBUG
  1354.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1355. '$endif ''DEBUG
  1356.         ERROR STFERR
  1357.     END IF
  1358. END SUB
  1359.  
  1360.  
  1361. '*************************************************************************
  1362. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1363. '$ifdef DEBUG
  1364.     if FValidInfSect(szSect$) = 0 then
  1365.         n% = 1
  1366.     elseif szKey$ = "" then
  1367.         n% = 2
  1368.     elseif FValidFATDir(szSrc$) = 0 then
  1369.         n% = 3
  1370.     elseif FValidFATPath(szDest$) = 0 then
  1371.         n% = 4
  1372.     else
  1373.         n% = 0
  1374.     end if
  1375.     if n% > 0 then
  1376.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1377.     end if
  1378. '$endif ''DEBUG
  1379.  
  1380.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1381. '$ifdef DEBUG
  1382.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1383. '$endif ''DEBUG
  1384.         ERROR STFERR
  1385.     END IF
  1386. END SUB
  1387.  
  1388.  
  1389. '*************************************************************************
  1390. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1391. '$ifdef DEBUG
  1392.     if szDll$ = "" then
  1393.         n% = 1
  1394.     elseif idDlg% = 0 then
  1395.         n% = 2
  1396.     elseif szProc$ = "" then
  1397.         n% = 3
  1398.     elseif lTicks& <= 0 then
  1399.         n% = 4
  1400.     else
  1401.         n% = 0
  1402.     end if
  1403.     if n% > 0 then
  1404.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1405.     end if
  1406. '$endif ''DEBUG
  1407.  
  1408.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1409. '$ifdef DEBUG
  1410.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1411. '$endif ''DEBUG
  1412.         ERROR STFERR
  1413.     END IF
  1414. END SUB
  1415.  
  1416.  
  1417. '*************************************************************************
  1418. SUB AddBlankToBillboardList (lTicks&) STATIC
  1419. '$ifdef DEBUG
  1420.     if lTicks& <= 0 then
  1421.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1422.     end if
  1423. '$endif ''DEBUG
  1424.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1425. '$ifdef DEBUG
  1426.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1427. '$endif ''DEBUG
  1428.         ERROR STFERR
  1429.     END IF
  1430. END SUB
  1431.  
  1432.  
  1433. '*************************************************************************
  1434. SUB ClearBillboardList STATIC
  1435.     IF FClearBillboardList = 0 THEN
  1436. '$ifdef DEBUG
  1437.         StfApiErr saeFail, "ClearBillboardList", ""
  1438. '$endif ''DEBUG
  1439.         ERROR STFERR
  1440.     END IF
  1441. END SUB
  1442.  
  1443.  
  1444. '*************************************************************************
  1445. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1446. '$ifdef DEBUG
  1447.     if FValidFATPath(szFile$) = 0 then
  1448.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1449.     end if
  1450. '$endif ''DEBUG
  1451.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1452. '$ifdef DEBUG
  1453.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1454. '$endif ''DEBUG
  1455.         ERROR STFERR
  1456.     END IF
  1457. END SUB
  1458.  
  1459.  
  1460. '*************************************************************************
  1461. SUB CloseLogFile STATIC
  1462.     IF FCloseLogFile() = 0 THEN
  1463. '$ifdef DEBUG
  1464.         StfApiErr saeFail, "CloseLogFile", ""
  1465. '$endif ''DEBUG
  1466.         ERROR STFERR
  1467.     END IF
  1468. END SUB
  1469.  
  1470.  
  1471. '*************************************************************************
  1472. SUB WriteToLogFile (szStr$) STATIC
  1473.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1474. '$ifdef DEBUG
  1475.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1476. '$endif ''DEBUG
  1477.         ERROR STFERR
  1478.     END IF
  1479. END SUB
  1480.  
  1481.  
  1482. ''' -1 in either parameter will mean 'center in frame client area'
  1483. '*************************************************************************
  1484. SUB SetCopyGaugePosition (x%, y%) STATIC
  1485.     ProSetPos x%, y%
  1486. END SUB
  1487.  
  1488.  
  1489. '*************************************************************************
  1490. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1491.     szBuf$ = STRING$(512, 32)
  1492.  
  1493.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1494.     IF wRet% = 0 THEN
  1495.         FindFileUsingFileOpen = szBuf$
  1496.     ELSEIF wRet% = 1 THEN
  1497.         FindFileUsingFileOpen = ""
  1498.     ELSE
  1499. '$ifdef DEBUG
  1500.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1501. '$endif ''DEBUG
  1502.         ERROR STFERR
  1503.     END IF
  1504.  
  1505.     szBuf$ = ""
  1506. END FUNCTION
  1507.  
  1508.  
  1509. '*************************************************************************
  1510. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1511.     IsDirWritable = FIsDirWritable(szDir$)
  1512. END FUNCTION
  1513.  
  1514.  
  1515. '*************************************************************************
  1516. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1517. '$ifdef DEBUG
  1518.     if FValidFATDir(szFile$) = 0 then
  1519.         BadArgErr 1, "IsFileWritable", szFile$
  1520.     end if
  1521. '$endif ''DEBUG
  1522.     IsFileWritable = FIsFileWritable(szFile$)
  1523. END FUNCTION
  1524.  
  1525.  
  1526. '*************************************************************************
  1527. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1528.     IF iField% < 1 THEN
  1529. '$ifdef DEBUG
  1530.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1531. '$endif ''DEBUG
  1532.         ERROR STFERR
  1533.     END IF
  1534.     szStart$ = szLine$
  1535.     IF iField% <> 1 THEN
  1536.         FOR i% = 2 TO iField% STEP 1
  1537.             iNew% = INSTR(szStart$, ",")
  1538.             IF iNew% = 0 THEN
  1539.                 GetNthFieldFromIniString = ""
  1540.                 GOTO _GNFFIS_END
  1541.             END IF
  1542.             szStart$ = MID$(szStart$, (iNew% + 1))
  1543.         NEXT
  1544.     END IF
  1545.  
  1546.     iNew% = INSTR(szStart$, ",")
  1547.     IF iNew% <> 0 THEN
  1548.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1549.     END IF
  1550.  
  1551.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1552.  
  1553. _GNFFIS_END:
  1554.  
  1555. END FUNCTION
  1556.  
  1557.  
  1558. '*************************************************************************
  1559. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1560.     GetWindowsMajorVersion = GetVersion() MOD 256
  1561. END FUNCTION
  1562.  
  1563.  
  1564. '*************************************************************************
  1565. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1566.     GetWindowsMinorVersion = GetVersion() / 256
  1567. END FUNCTION
  1568.  
  1569.  
  1570. '*************************************************************************
  1571. FUNCTION GetWindowsMode STATIC AS INTEGER
  1572.     GetWindowsMode = 0
  1573.     longTmp& = GetWinFlags()
  1574.     IF longTmp& AND WF_STANDARD THEN
  1575.         GetWindowsMode = 1
  1576.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1577.         GetWindowsMode = 2
  1578.     END IF
  1579. END FUNCTION
  1580.  
  1581.  
  1582. '*************************************************************************
  1583. FUNCTION GetWindowsDir STATIC AS STRING
  1584.     szBuf$ = string$(256, 32)
  1585.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1586.  
  1587.     IF cbBuf% = 0 THEN
  1588.         GetWindowsDir = ""
  1589. '$ifdef DEBUG
  1590.         StfApiErr saeFail, "GetWindowsDir", ""
  1591. '$endif ''DEBUG
  1592.         ERROR STFERR
  1593.     ELSE
  1594.         IF cbBuf% > 255 THEN
  1595.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1596.             ERROR STFERR
  1597.         END IF
  1598.         szBuf$ = RTRIM$(szBuf$)
  1599.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1600.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1601.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1602.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1603.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1604.         END IF
  1605.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1606.             szBuf$ = szBuf$ + "\"
  1607.         END IF
  1608.         GetWindowsDir = szBuf$
  1609.     END IF
  1610.  
  1611.     szBuf$ = ""
  1612. END FUNCTION
  1613.  
  1614.  
  1615. '*************************************************************************
  1616. FUNCTION GetWindowsSysDir STATIC AS STRING
  1617.     szBuf$ = string$(256, 32)
  1618.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1619.  
  1620.     IF cbBuf% = 0 THEN
  1621. '$ifdef DEBUG
  1622.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1623. '$endif ''DEBUG
  1624.         ERROR STFERR
  1625.     ELSE
  1626.         IF cbBuf% > 255 THEN
  1627.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1628.             ERROR STFERR
  1629.         END IF
  1630.         szBuf$ = RTRIM$(szBuf$)
  1631.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1632.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1633.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1634.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1635.         END IF
  1636.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1637.             szBuf$ = szBuf$ + "\"
  1638.         END IF
  1639.         GetWindowsSysDir = szBuf$
  1640.     END IF
  1641.  
  1642.     szBuf$ = ""
  1643. END FUNCTION
  1644.  
  1645.  
  1646. '*************************************************************************
  1647. FUNCTION IsWindowsShared STATIC AS INTEGER
  1648.     szWin$ = UCASE$(GetWindowsDir())
  1649.     szSys$ = UCASE$(GetWindowsSysDir())
  1650.  
  1651.     IF len(szWin$) = 0 THEN
  1652. '$ifdef DEBUG
  1653.         StfApiErr saeFail, "IsWindowsShared", ""
  1654. '$endif ''DEBUG
  1655.         ERROR STFERR
  1656.     END IF
  1657.  
  1658.     IF len(szSys$) <= len(szWin$) THEN
  1659.         IsWindowsShared = 1
  1660.     ELSE
  1661.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1662.         IF szWin$ = szSys$ THEN
  1663.             IsWindowsShared = 0
  1664.         ELSE
  1665.             IsWindowsShared = 1
  1666.         END IF
  1667.     END IF
  1668. END FUNCTION
  1669.  
  1670.  
  1671. '*************************************************************************
  1672. FUNCTION GetScreenWidth STATIC AS INTEGER
  1673.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1674. END FUNCTION
  1675.  
  1676.  
  1677. '*************************************************************************
  1678. FUNCTION GetScreenHeight STATIC AS INTEGER
  1679.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1680. END FUNCTION
  1681.  
  1682.  
  1683. '*************************************************************************
  1684. SUB SetRestartDir (szDir$) STATIC
  1685. '$ifdef DEBUG
  1686.     if FValidFATDir(szDir$) = 0 then
  1687.         BadArgErr 1, "SetRestartDir", szDir$
  1688.     end if
  1689. '$endif ''DEBUG
  1690.     IF FSetRestartDir(szDir$) = 0 THEN
  1691. '$ifdef DEBUG
  1692.         StfApiErr saeFail, "SetRestartDir", szDir$
  1693. '$endif ''DEBUG
  1694.         ERROR STFERR
  1695.     END IF
  1696. END SUB
  1697.  
  1698.  
  1699. '*************************************************************************
  1700. FUNCTION RestartListEmpty STATIC AS INTEGER
  1701.     IF FRestartListEmpty() = 0 THEN
  1702.         RestartListEmpty = 0
  1703.     ELSE
  1704.         RestartListEmpty = 1
  1705.     END IF
  1706. END FUNCTION
  1707.  
  1708.  
  1709. '*************************************************************************
  1710. FUNCTION ExitExecRestart STATIC AS INTEGER
  1711.     ExitExecRestart = FExitExecRestart
  1712. END FUNCTION
  1713.  
  1714.  
  1715. '*************************************************************************
  1716. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1717.  
  1718. '$ifdef DEBUG
  1719.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1720.         n% = 1
  1721.     elseif FValidFATPath(szDst$) = 0 then
  1722.         n% = 2
  1723.     elseif FValidFATDir(szDir$) = 0 then
  1724.         n% = 3
  1725.     else
  1726.         n% = 0
  1727.     end if
  1728.     if n% > 0 then
  1729.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1730.     end if
  1731. '$endif ''DEBUG
  1732.  
  1733.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1734. '$ifdef DEBUG
  1735.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1736. '$endif ''DEBUG
  1737.         ERROR STFERR
  1738.     END IF
  1739. END SUB
  1740.  
  1741.  
  1742.  
  1743. '**************************************************************************
  1744. '***************************  Error Handlers  *****************************
  1745. '**************************************************************************
  1746.  
  1747.  
  1748. '$ifdef DEBUG
  1749. '**************************************************************************
  1750. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1751.     select case nMsg%
  1752.         case saeFail
  1753.             lpText$ = "Failed"
  1754.         case saeInit
  1755.             lpText$ = "Already Initialized"
  1756.         case saeNYI
  1757.             lpText$ = "NYI"
  1758.         case else
  1759.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1760.     end select
  1761.  
  1762.     lpText$ = lpText$ + ": "+ szApi$
  1763.     if szArgs$ <> "" then
  1764.         lpText$ = lpText + " (" + szArgs$ + ")"
  1765.     end if
  1766.     lpCaption$ = "MS-Setup Toolkit API Error"
  1767.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1768.     print lpText$
  1769.     lpText$ = ""
  1770.     lpCaption$ = ""
  1771. END SUB
  1772.  
  1773. '**************************************************************************
  1774. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1775.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1776.     ERROR STFERR
  1777. END SUB
  1778.  
  1779.  
  1780. '** REVIEW: Move this function into common lib (we'll need it there too)
  1781. '**************************************************************************
  1782. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1783.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1784.         FValidInfSect = 0
  1785.     else
  1786.         FValidInfSect = 1
  1787.     end if
  1788. END FUNCTION
  1789.  
  1790.  
  1791. '** REVIEW: Move this function into common lib (we'll need it there too)
  1792. '**************************************************************************
  1793. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1794.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1795.         FValidIniFile = 0
  1796.     else
  1797.         FValidIniFile = 1
  1798.     end if
  1799. END FUNCTION
  1800.  
  1801. '**************************************************************************
  1802. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1803.  
  1804.     if szDrive$ = "" then
  1805.         FValidDrive = 0
  1806.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1807.         FValidDrive = 1
  1808.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1809.         FValidDrive = 0
  1810.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1811.         FValidDrive = 0
  1812.     elseif LEN(szDrive$) = 1 then
  1813.         FValidDrive = 1
  1814.     elseif INSTR(2,szDrive$,":\") = 2 then
  1815.         FValidDrive = 1
  1816.     elseif INSTR(1,szDrive$,":") = 2 then
  1817.         FValidDrive = 1
  1818.     else
  1819.         FValidDrive = 0
  1820.     end if
  1821. END FUNCTION
  1822.  
  1823. '$endif ''DEBUG
  1824.  
  1825.  
  1826. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1827.  
  1828. End Trap
  1829.  
  1830. hSetup = InitSetup(COMMAND$)
  1831.  
  1832. ON ERROR GOTO QUIT
  1833.  
  1834.